/*
对象扩展   函数新增特性
1.简洁表示法
2.属性表达式
3.扩展运算符
4.Object新增方法
*/
{
  //简洁表示法
  let o=1;
  let k=2;
  let es5={
    o:o,
    k:k
  };
  let es6={
    o,k
  };
  console.log(es6);//{o: 1, k: 2}
  console.log(es5);//{o: 1, k: 2}
  //如果对象里面存在方法
  let es5_methods={
    hello:function(){
      console.log('hello world');
    }
  }
  let es6_methods={
    hello(){
      console.log('hello world');
    }
  }
  es6_methods.hello();//hello world
  es5_methods.hello();//hello world
}

{
  //属性表达式
  let a='b';
  let es5_obj={
    a:'c'
  }
  let es6_obj={
    a:'c',
    //[a]表示一个变量 前面的a定义的了一个变量是b 所以输出结果是{a: "c", b: "c"}
    [a]:'c'
  }
  console.log(es6_obj);//{a: "c", b: "c"}
}
//object中常用的api
{
    //1.判断对象中两个值是否相等
    console.log('字符串',Object.is('abc','abc'),'abc'==='abc');//true   true
    //数组也是引用类型，所以他们的址是不同的
    console.log('数组',Object.is([],[]),[]===[]);//false, false
    //拷贝的属性是有限制的，是浅拷贝，引用的类型，就是拷贝引用，对象有继承的话也是不能拷贝的，不能拷贝对象的不可枚举的属性
    console.log('拷贝',Object.assign({a:'a'},{b:'b'}));

    let test={k:123,o:456};
    for(let [key,value] of Object.entries(test)){
      console.log([key,value]);
    }
}

{
    //扩展运算符   es6中也是不支持，是一个es7的一个草案
    // let {a,b,...c}={a:'test',b:'kill',c:'ddd',d:'ppp'}
    // console.log(c);
}
